package java8Up;

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * @author Fang Ruichuan
 * @date 2022-09-17 15:04
 */
public class LinkedHashMapDemo {
    public static void main(String[] args) {
        LRU<Character, Integer> lru = new LRU<>(16, 0.75f, true);
        String s = "abcdefhijkl";
        for (int i = 0, len = s.length(); i < len; i++) {
            lru.put(s.charAt(i), i);
        }
        System.out.println("LRU中key为h的Entry的值为：" + lru.get('h'));
        System.out.println("LRU的大小：" + lru.size());
        System.out.println("LRU: " + lru);
    }
}

// 使用LinkedHashMap实现一个符合LRU算法的数据结构，该结构最多可以缓存6个元素，但元素多余六个时，会自动删除最近最久没有被使用的元素
class LRU<K, V> extends LinkedHashMap<K, V> implements Map<K, V> {
    private static final long serialVersionUID = 1L;

    public LRU(int initialCapacity, float loadFactor, boolean accessOrder) {
        super(initialCapacity, loadFactor, accessOrder);
    }

    /**
     * 重写LinkedHashMap中的removeEldestEntry方法，当LRU中元素多余6个时，删除最不经常使用的元素
     * @author Fang Ruichuan
     * @date 2022/9/17 15:48
     * @param eldest
     * @return boolean
     */
    @Override
    protected boolean removeEldestEntry(Entry<K, V> eldest) {
        if (size() > 6) {
            return true;
        }
        return false;
    }
}
